feat(wsl): 完善 WSL 实例创建后的 HOME 操作能力(issue #19 后续) - #48
Conversation
- wsl.rs 新增路径桥 fs_path/home_fs_path/version_fs_path/ensure_distro_running(UNC 映射 + TTL 缓存 + 单测),集中处理 WSL 路径 - profiles/MCP/skills/图标/日志走 UNC;插件读操作 resolve_instance 返回 fs 路径 - 插件安装/卸载/迁移在发行版内执行 pnpm(resolve_instance_linux + wsl_bash + 发行版内 node/pnpm/store);本地 .tgz 复制进发行版 tmp - 整合包导入现有 WSL 实例:UNC 写 profile 文件 + pnpm_install_profile_wsl;导出源经 UNC - copy_instance 与复制任务支持 WSL 源(经 UNC),移除 WSL 拒绝守卫 - 终端/TUI 对 WSL 启动 wsl.exe bash(发行版内 node+bin,exec 语义) - 前端解除 WSL 整页禁用(profiles/plugins/skills/mcp/terminal),插件安装/迁移向导纳入 WSL 实例;i18n 清理 - 文档(README 中英)补充 WSL 能力说明
请求修改(request changes)把「Windows 侧读文件 + 发行版内执行命令」的意图做成集中路径桥( 阻塞项 1:
|
|
补充说明(维护者):经评估,本 PR 修复上面 6 项阻断问题需要跨文件的 WSL 路径分隔符重构( |
概述 (Summary)
解决在 WSL2 发行版中创建实例后无法操作其
DSH_HOME的问题(issue #19 后续)。建立集中式 WSL 路径桥与双通道执行机制(Windows 侧经 UNC 读写文件 + 发行版内经
wsl.exe执行命令),将启动器的全部 HOME 管理优势对齐覆盖到 WSL2 实例。核心改动 (Key Changes)
1. 集中路径桥与发行版按需拉起 (
src-tauri/src/wsl.rs)fs_path/home_fs_path/version_fs_path:Windows 访问路径集中解析,本地路径原样返回,WSL 路径映射为\\wsl$\<distro>\UNC 路径。ensure_distro_running:操作前以wsl.exe -d <distro> -- true按需唤醒发行版,并带 5 秒 TTL 内存缓存,避免在高频列表中频繁产生子进程开销。2. 纯文件类 HOME 操作对齐
commands.rs):list_profiles、list_profile_infos、create_profile、copy_profile、rename_profile、delete_profile统一走home_fs_path,Profile 增删改查及类型判定完全正常。mcp.rs,skills.rs):home_path_of改走home_fs_path,支持经 UNC 读写cordis.patch.yml与skills/目录。icons.rs,commands.rs):图标读写与快捷方式生成走 UNC 映射;确认日志原生存储于宿主机data_dir/logs,无需特殊分支。commands.rs):open_instance_directory改为 async,在打开目录前先调用ensure_distro_running。3. 发行版内命令执行与插件管理 (
plugins.rs)resolve_instance语义明确为返回 Windows 可视路径;新增resolve_instance_linux返回 Linux 真实路径与 distro 标识。run_dsh_plugin增加 WSL 感知:文件准备/补丁操作经 UNC 执行,dsh plugin add/remove在 WSL 内执行(通过wsl_bash使用发行版管理的 Node、pnpm 及 Linux store 路径)。dsh_plugin_command改为 async,使用wsl_test探针异步验证发行版内版本文件,并按 6 占位符参数格式化wsl_bash脚本。start_install_plugin_file_task:为 WSL 目标安装本地.tgz插件时,先复制至发行版临时目录后引用 Linux 路径。4. 整合包导入导出与实例复制 (
modpack.rs,tasks.rs,commands.rs)do_import_modpack支持导入到现有 WSL 实例:文件写入走 UNC,新增pnpm_install_profile_wsl在发行版内执行依赖安装。copy_instance与后台复制任务解除 WSL 限制,支持以 WSL 实例为源完整克隆到本地 Windows 新 HOME。5. 内置终端与 TUI 支持 (
terminal.rs,tui.rs)terminal::spawn_session:对 WSL 实例启动wsl.exe -d <distro> -- bash -i,跳过 Windows.cmdshim,工作目录以临时目录启动避免 UNC cwd 报错。tui::start_tui_session:异步检测发行版并经wsl_bash以exec语义拉起发行版内部的 Node + TUI bin。6. 前端解禁与本地化 (
src/)InstanceEdit.vue:移除针对 WSL 的 profiles/plugins/skills/mcp/terminal 全页禁用占位,按各模块实际能力正常展示。InstallWizard.vue/MigratePluginsDialog.vue:移除对 WSL 实例的过滤,支持向 WSL 安装/迁移插件。locales:移除死键,文档(中/英 README)补充 WSL 运行机制说明。验证情况 (Verification)
cargo fmt --manifest-path src-tauri/Cargo.toml --all -- --check通过。cargo clippy --workspace --all-targets -- -D warnings零警告。cargo test --workspace115 项单元测试全部 pass(含wsl::tests新增测试)。pnpm build(vue-tsc --noEmit && vite build)通过。wsl.exe命令交互、\\wsl$\Ubuntu\home\...路径读写与 Linux$HOME解析正常。pnpm tauri build --no-bundle成功产出 15.4MB release 可执行文件。